package com.jc.cloud.sign.bean.dto;

import com.jc.cloud.sign.config.validation.FixedArrValueValidator;
import com.jc.cloud.sign.config.validation.FixedValueValidator;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotEmpty;

@ApiModel(description = "生成子客登录链接 https://qian.tencent.com/developers/partnerApis/accounts/CreateConsoleLoginUrl")
@Data
/**
 * https://qian.tencent.com/developers/partnerApis/accounts/CreateConsoleLoginUrl
 */
public class CeateConsoleLoginUrlDTO {

    /**
     * 子客企业名称，最大长度64个字符
     */
    @ApiModelProperty("子客企业名称，最大长度64个字符")
    @NotEmpty(message = "子客企业名称必填")
    @Length(max = 64,message = "子客企业名称，最大长度64个字符")
    private String ProxyOrganizationName;
    /**
     * 子客企业统一社会信用代码，最大长度200个字符
     */
    @Length(max = 200,message = "子客企业名称，最大长度200个字符")
    @ApiModelProperty("子客企业名称，最大长度200个字符")
    private String PniformSocialCreditCode;
    /**
     * 子客企业经办人的姓名，最大长度50个字符
     */
    @Length(max = 50,message = "子客企业经办人的姓名，最大长度50个字符\n")
    @ApiModelProperty("子客企业经办人的姓名，最大长度50个字符")
    private String ProxyOperatorName;
    /**
     * PC控制台登录后进入该参数指定的模块，如果不传递，将默认进入控制台首页。支持的模块包括：
     * 1、DOCUMENT:合同管理模块，
     * 2、TEMPLATE:企业模板管理模块，
     * 3、SEAL:印章管理模块，
     * 4、OPERATOR:组织管理模块，
     */
    @ApiModelProperty("PC控制台登录后进入该参数指定的模块，如果不传递，将默认进入控制台首页。支持的模块包括：\n" +
            "1、DOCUMENT:合同管理模块，\n" +
            "2、TEMPLATE:企业模板管理模块，\n" +
            "3、SEAL:印章管理模块，\n" +
            "4、OPERATOR:组织管理模块，")
    @FixedValueValidator(fixedValue = {"DOCUMENT","TEMPLATE","SEAL","OPERATOR"},message = "参数必须为DOCUMENT，TEMPLATE,SEAL,OPERATOR")
    private String Module;
    /**
     * 该参数和Module参数配合使用，用于指定模块下的资源Id，指定后链接登录将展示该资源的详情。
     * 根据Module参数的不同所代表的含义不同。当前支持：
     * 1、如果Module="SEAL"，ModuleId代表印章Id, 登录链接将直接查看指定印章的详情。
     * 2、如果Module="TEMPLATE"，ModuleId代表模版Id，登录链接将直接查看指定模版的详情。
     * 3、如果Module="1、DOCUMENT"，ModuleId代表合同Id，登录链接将直接查看指定合同的详情。
     */
    @ApiModelProperty("该参数和Module参数配合使用，用于指定模块下的资源Id，指定后链接登录将展示该资源的详情。\n" +
            "根据Module参数的不同所代表的含义不同。当前支持：\n" +
            "1、如果Module=\"SEAL\"，ModuleId代表印章Id, 登录链接将直接查看指定印章的详情。\n" +
            "2、如果Module=\"TEMPLATE\"，ModuleId代表模版Id，登录链接将直接查看指定模版的详情。\n" +
            "3、如果Module=\"1、DOCUMENT\"，ModuleId代表合同Id，登录链接将直接查看指定合同的详情。")
    @FixedValueValidator(fixedValue = {"SEAL","TEMPLATE","DOCUMENT"},message = "参数必须为SEAL，TEMPLATE,DOCUMENT")
    private String ModuleId;
    /**
     * 是否展示左侧菜单栏
     * "ENABLE": 是，展示
     * “DISABLE”: 否，不展示
     * 默认值为ENABLE
     */
    @ApiModelProperty("是否展示左侧菜单栏\n" +
            "\"ENABLE\": 是，展示\n" +
            "“DISABLE”: 否，不展示\n" +
            "默认值为ENABLE")
    @FixedArrValueValidator(fixedValue = {"ENABLE","DISABLE"},message = "参数必须为ENABLE，DISABLE")
    private String MenuStatus="ENABLE";
    /**
     * 生成链接的类型：
     * "PC"：PC控制台链接
     * "CHANNEL"：H5跳转到电子签小程序链接
     * "APP"：第三方APP或小程序跳转电子签小程序链接
     * 默认将生成PC控制台链接
     */
    @ApiModelProperty("生成链接的类型：\n" +
            "\"PC\"：PC控制台链接\n" +
            "\"CHANNEL\"：H5跳转到电子签小程序链接\n" +
            "\"APP\"：第三方APP或小程序跳转电子签小程序链接\n" +
            "默认将生成PC控制台链接")
    @FixedValueValidator(fixedValue = {"PC","CHANNEL","APP"},message = "参数必须为PC，CHANNEL,APP")
    private String Endpoint="PC";
    /**
     * 触发自动跳转事件，仅对EndPoint为App类型有效，可选值包括：
     * "VERIFIED":企业认证完成/员工认证完成后跳回原App/小程序
     */
    @ApiModelProperty("触发自动跳转事件，仅对EndPoint为App类型有效，可选值包括：\n" +
            "\"VERIFIED\":企业认证完成/员工认证完成后跳回原App/小程序")
    @FixedValueValidator(fixedValue = {"VERIFIED"},message = "参数必须为VERIFIED")
    private String AutoJumpBackEvent;
    /**
     * 可选的企业授权方式:
     * 1：上传授权书
     * 2：转法定代表人授权
     * 4：企业实名认证（信任第三方认证源）（此项仅支持单选）
     * 未选择信任第三方认证源时，如果是法人进行企业激活，仅支持法人扫脸直接授权，该配置不生效；选择信任第三方认证源时，请先通过“同步企业信息”接口同步信息。
     * 该参数仅在企业激活场景生效
     */
    @ApiModelProperty("可选的企业授权方式:\n" +
            "1：上传授权书\n" +
            "2：转法定代表人授权\n" +
            "4：企业实名认证（信任第三方认证源）（此项仅支持单选）")
    @FixedArrValueValidator(fixedValue = {"1","2","4"},message = "参数必须为1,2,4")
    private Long[] AuthorizationTypes;

}
